package cn.iocoder.yudao.module.mqtt.service.devicelatestflow;

import java.util.*;

import cn.iocoder.yudao.module.mqtt.controller.admin.littree.vo.LisToken;
import cn.iocoder.yudao.module.mqtt.dal.dataobject.device.DeviceDO;
import jakarta.validation.*;
import cn.iocoder.yudao.module.mqtt.controller.admin.devicelatestflow.vo.*;
import cn.iocoder.yudao.module.mqtt.dal.dataobject.devicelatestflow.DeviceLatestFlowDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

/**
 * 设备最新信息 Service 接口
 *
 * @author 管理员
 */
public interface DeviceLatestFlowService {

    /**
     * 创建设备最新信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createDeviceLatest(@Valid DeviceLatestFlowSaveReqVO createReqVO);

    /**
     * 更新设备最新信息
     *
     * @param updateReqVO 更新信息
     */
    void updateDeviceLatest(@Valid DeviceLatestFlowSaveReqVO updateReqVO);

    void updateDeviceLatest(@Valid DeviceLatestFlowDO latestDO);
    void updateDeviceLatestByGetewayId(List<DeviceLatestFlowDO> doList);

    /**
     * 水量 - 累计
     * @param deviceDO
     * @return
     */
    DeviceLatestFlowDO saveWater(DeviceDO deviceDO);

    /**
     * 水量 - 瞬时流浪
     * @param deviceDO
     * @return
     */
    DeviceLatestFlowDO saveWaterSun(DeviceDO deviceDO);

    /**
     * 消失
     * @param deviceDO
     * @return
     */
    DeviceLatestFlowDO saveWaterHourSun(DeviceDO deviceDO);

    /**
     * 上报检测局
     * @param deviceLatestDO
     */
    Integer uploadJCJ(DeviceLatestFlowDO deviceLatestDO,Long logId);
    /**
     * 删除设备最新信息
     *
     * @param id 编号
     */
    void deleteDeviceLatest(Long id);

    /**
    * 批量删除设备最新信息
    *
    * @param ids 编号
    */
    void deleteDeviceLatestListByIds(List<Long> ids);

    /**
     * 获得设备最新信息
     *
     * @param id 编号
     * @return 设备最新信息
     */
    DeviceLatestFlowDO getDeviceLatest(Long id);

    DeviceLatestFlowDO getDeviceLatestByGatewayId(String getewatId);

    DeviceLatestFlowDO getDeviceKey(String dKey);
    /**
     * 获得设备最新信息分页
     *
     * @param pageReqVO 分页查询
     * @return 设备最新信息分页
     */
    PageResult<DeviceLatestFlowDO> getDeviceLatestPage(DeviceLatestFlowPageReqVO pageReqVO);


    List<DeviceLatestFlowDO> getList(DeviceLatestFlowReqVO reqVO);

}